package main

import "fmt"

// 常量（通常定义在全局）
// const pi=3.1415
// const e = 2.7
// const(
// 	a = 3.13
// 	b = 2.1
// )
// const (
// 	n1 = 100 // 未被赋值的常量会和上一个常量值相同
// 	n2
// 	n3
// )
const (
	/*
		iota是go语言的常量计数器，只能在常量的表达式中使用。
		iota在const关键字出现时将被重置为0。const中每新增
		一行常量声明将使iota计数一次(iota可理解为const语句
		块中的行索引)。 使用iota能简化定义，在定义枚举时很
		有用。
	*/
	n1 = iota //0
	n2 = iota //1
	n3 = iota //2
	n4 = iota //3
)

/*
几个常见的iota示例:
使用 _ 跳过某些值

const (
		n1 = iota //0
		n2        //1
		_
		n4        //3
	)
iota声明中间插队

const (
		n1 = iota //0
		n2 = 100  //100
		n3 = iota //2
		n4        //3
	)
	const n5 = iota //0
定义数量级 （这里的<<表示左移操作，1<<10表示将1的
二进制表示向左移10位，也就是由1变成了10000000000，
也就是十进制的1024。同理2<<2表示将2的二进制表示向
左移2位，也就是由10变成了1000，也就是十进制的8。）

const (
		_  = iota
		KB = 1 << (10 * iota)
		MB = 1 << (10 * iota)
		GB = 1 << (10 * iota)
		TB = 1 << (10 * iota)
		PB = 1 << (10 * iota)
	)
多个iota定义在一行

const (
		a, b = iota + 1, iota + 2 //1,2
		c, d                      //2,3
		e, f                      //3,4
	)

*/

func main() {
	fmt.Println(n1, n2, n3, n4)
}
